// 观察者模式是定义了对象间的一种‘一对多’的依赖关系，当一个状态发生变化时，所有依赖于它的对象都将得到通知并自动更新

// 观察者
class Observer {
  constructor(name) {
    this.name = name;
  }
  // 观察者默认提供一个update方法，用于更新数据
  update(info, ...args) {
    console.log(`hello, ${this.name}, 告诉你一件事: ${info}`);
  }
}
// 目标对象
class Subject {
  constructor() {
    this.observerList = [];
  }
  addObserver(observer) {
    this.observerList.push(observer);
  }
  notify() {
    this.observerList.forEach((observer) => observer.update(...arguments));
  }
}

const Tt = new Observer('婷婷');
const Xy = new Observer('小月');
const sub = new Subject();
sub.addObserver(Tt);
sub.addObserver(Xy);
sub.notify('今天我要干你');
sub.notify('明天我要干你');

/**
 * 打印结果：
 * hello, 婷婷, 告诉你一件事: 今天我要干你
 * hello, 小月, 告诉你一件事: 今天我要干你
 * hello, 婷婷, 告诉你一件事: 明天我要干你
 * hello, 小月, 告诉你一件事: 明天我要干你
 */
